350 IF ANS$ <> "N" AND ANS$ <> "n" THEN LOCATE 7,1:TODSK$ = "Y":PRINT "Change the Cryptogram and move the cursor to the end before pressing enter. ":FOR A=1 TO 5:PRINT SPC(79):NEXT:LOCATE 15,1:GOTO 240
358 ' ********* CORRECT THE PROBLEM OF A WORD SPLIT ONTO TWO LINES ****
360 Y=80: GOSUB 410
370 Y=160: GOSUB 410
380 Y=240:GOSUB 410
390 GOTO 490
410 IF LEN(CRYPTO$) < Y+1 THEN GOTO 480
420 IF MID$(CRYPTO$,Y,1) = " " THEN GOTO 480
430 IF MID$(CRYPTO$,Y+1,1) = " " THEN GOTO 480
440 FOR X=Y TO Y-20 STEP -1
450 IF MID$(CRYPTO$,X,1) = SP$ THEN CRYPTO$=MID$(CRYPTO$,1,X) + MID$(BLANK$,1,Y-X) + MID$(CRYPTO$,X+1) :GOTO 480
460 NEXT X
470 PRINT "CANNOT HANDLE WORDS > 20 CHAR AT END OF THE LINE. FIX WITH CHANGE ROUTINE.":FOR ZX = 1 TO 4000:NEXT ZX:GOTO 310
480 RETURN
488 ' ****** PUT THE CODE ON DISK? Only if from keyboard or changed. ******
490 FOR X=1 TO 2:PRINT SPC(79):NEXT
495 IF TODSK$ = "N" THEN GOTO 540
500 LOCATE 7,1:PRINT "Would you like this cryptogram stored on disk? (Y/N)";SPC(20):FOR X=1 TO 6:PRINT SPC(79):NEXT:LOCATE 7,55
510 INPUT X$:IF X$="y" OR X$ = "Y" THEN GOTO 520 ELSE GOTO 540
520 OPEN "crypdata" AS #1 LEN=256:FIELD #1, 255 AS C$
522 LASTCR = LOF(1)/256:INPUT "Which slot? Key 0 for the next available new location.",NUM%
524 LSET C$ = CRYPTO$:IF NUM% > 0 THEN PUT #1, NUM% ELSE IF NUM% =0 THEN PUT #1,(LASTCR + 1)
530 CLOSE
538 ' ****** PUT THE CRYPTOGRAM ON THE SCREEN IN DECODE POSITION ******
540 CLS :LOCATE ,35:PRINT "CRYPTOGRAM"
550 LOCATE 5,1
560 PRINT LEFT$(CRYPTO$,80)
570 IF LEN(CRYPTO$) < 81 THEN GOTO 630
580 LOCATE 9,1:PRINT MID$(CRYPTO$,81,80)
590 IF LEN(CRYPTO$) < 161 THEN GOTO 630
600 LOCATE 13,1:PRINT MID$(CRYPTO$,161,80)
610 IF LEN(CRYPTO$) < 241 THEN GOTO 630
620 LOCATE 17,1:PRINT MID$(CRYPTO$,241)
630 PRINT SPC(79)
640 COLOR 15
650 LOCATE 23,1
660 PRINT " A B C D E F G H I J K L M N O P Q R S T U V W X Y Z"
661 IF MID$(CRYPTO$,241,10) = MID$(BLANK$,1,10) THEN CRYPTO$ = LEFT$(CRYPTO$,240)
662 IF MID$(CRYPTO$,161,10) = MID$(BLANK$,1,10) THEN CRYPTO$ = LEFT$(CRYPTO$,160)
663 IF MID$(CRYPTO$,81,10) = MID$(BLANK$,1,10) THEN CRYPTO$ = LEFT$(CRYPTO$,80)
670 LOCATE 4,1,1:'LOCATE THE CURSOR OVER THE FIRST CHAR OF THE CODE
678 ' ****** GET AN INPUT KEYSTROKE ******
680 X$ = INKEY$
690 IF LEN(X$)= 0 THEN GOTO 680 ELSE LOCATE ,,0 'WAIT FOR A KEY STROKE
700 CH = ASC(X$):IF (CH > 96) AND (CH < 123) THEN LET CH = CH-32:X$ = CHR$(CH)
710 X=POS(0):Y=CSRLIN
720 IF LEN(X$) = 2 GOTO 780
730 IF ASC(X$) = 13 THEN X=1:Y=Y+4:IF Y>16 THEN Y=4:GOTO 760 ELSE GOTO 760 'NL
740 IF ASC(X$) = 8 THEN X = X-1:IF X < 1 THEN X=80:GOTO 760 ELSE GOTO 760 'BKSP
750 GOSUB 960
760 LOCATE Y,X,1
770 GOTO 680 'GOTO GET THE NEXT CHARACTER
780 ' Cursor Ctl. Which?
790 Z = (ASC(MID$(X$,2,1))-70)
792 IF Z < 1 GOTO 760
794 IF Z > 10 GOTO 760
800 ON Z GOSUB 855,860,850,850,890,850,910,920,930,940
810 ' 71 72 73 74 75 76 77 78 79 80 81
820 ' home up left right down
830 GOTO 760
840 ' ***** ROUTINE TO MOVE THE CURSOR AROUND *****
850 RETURN 'no routine
855 X=1:Y=4 'home
856 RETURN
860 Y=Y-4:IF Y < 4 THEN Y=16: RETURN 'cursor up
870 RETURN 'page up
880 RETURN 'unused
890 X= X-1:IF X = 0 THEN X = 80 :RETURN 'cursor left
900 RETURN 'unused
910 X=X+1:IF X>80 THEN X = 1:RETURN 'cursor right
920 RETURN 'unused
930 RETURN 'end
940 Y=Y+4:IF Y > 16 THEN Y=4:RETURN 'cursor down
950 RETURN
960 '****** DECODE ROUTINE. Verify that itis a permissable character *******
970 Q=(Y*160)-160+(X*2)-2
980 PREV$=CHR$(PEEK(Q))
990 IF (ASC(PREV$) >= 65) AND (ASC(PREV$) <= 90) THEN LOCC =(ASC(PREV$) - 64)*3:LOCATE 23,LOCC:PRINT PREV$;
1000 IF (ASC(X$) >= 65) AND (ASC(X$) <= 90) THEN LOCC =(ASC(X$) - 64)*3:LOCATE 23,LOCC:IF PEEK((22*160)+(LOCC*2)-2) = 32 THEN BEEP:GOTO 1040 ELSE PRINT " ":LOCATE Y,X,1:PRINT X$
1010 POKE Q+1,10
1020 R=Q+160
1030 FOR P=1 TO 4:GOSUB 1050:NEXT P 'chk 4 lines of code
1040 RETURN
1048 '****** DECODE ROUTINE. Replace the code on each line. *******
1050 IF LEN(CRYPTO$) <= (P-1)*80 THEN P=4:GOTO 1120 ELSE S=P*640
1060 FOR ZX = S TO S+158 STEP 2
1100 IF PEEK(R) = PEEK(ZX) THEN POKE ZX-160,ASC(X$):POKE ZX-159,10
1110 NEXT
1120 RETURN
1128 ' ****** GET THE CRYPTOGRAM FROM THE DISK ******
1130 OPEN "CRYPDATA" AS #1 LEN=256
1140 FIELD #1, 255 AS C$
1150 LASTCR = LOF(1)/256
1160 LOCATE 7
1170 PRINT " CHOOSE THE CRYPTOGRAM YOU WANT TO SOLVE "
1180 PRINT
1190 PRINT " RETURN - Will display the next Cryptogram. "
1200 PRINT
1210 PRINT " Number 1 to ... will display the one selected. "
1220 PRINT
1230 PRINT " Y - (Yes) will use the one displayed to decode. "
1240 LOCATE 11,25,0
1250 PRINT LASTCR
1260 CNUM = LASTCR:GOTO 1290
1270 INPUT NUM$:NUM = VAL(NUM$):IF NUM > 0 THEN CNUM = NUM
1280 IF NUM$="y" OR NUM$="Y" THEN CLOSE #1:GOTO 310